import { createRouter, createWebHistory } from 'vue-router'
import { isLoggedIn, user, initAuth } from '@/stores/auth'

// 导入页面组件
const LoginView = () => import('@/views/LoginView.vue')
const DashboardView = () => import('@/views/DashboardView.vue')
const AdminView = () => import('@/views/AdminView.vue')

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      redirect: '/login'
    },
    {
      path: '/login',
      name: 'login',
      component: LoginView,
      meta: { 
        requiresAuth: false,
        title: '登录'
      }
    },
    {
      path: '/dashboard',
      name: 'dashboard',
      component: DashboardView,
      meta: { 
        requiresAuth: true, 
        role: 'user',
        title: '数据中心'
      }
    },
    {
      path: '/admin',
      name: 'admin',
      component: AdminView,
      meta: { 
        requiresAuth: true, 
        role: 'admin',
        title: '管理中心'
      }
    },
    {
      // 404页面重定向到登录
      path: '/:pathMatch(.*)*',
      redirect: '/login'
    }
  ],
})

// 路由守卫 - 优化性能，避免阻塞路由跳转
router.beforeEach(async (to, from, next) => {
  // 设置页面标题
  if (to.meta.title) {
    document.title = `天气数据系统 - ${to.meta.title}`
  }
  
  // 只在需要认证检查时才初始化认证状态
  if (to.meta.requiresAuth || to.path === '/login') {
    // 非阻塞式认证检查
    if (!isLoggedIn.value && !user.value) {
      try {
        await initAuth()
      } catch (error) {
        console.error('认证初始化失败:', error)
      }
    }
  }
  
  // 如果访问登录页面且已经登录，则根据角色重定向
  if (to.path === '/login' && isLoggedIn.value) {
    if (user.value?.role === 'admin') {
      next('/admin')
    } else {
      next('/dashboard')
    }
    return
  }
  
  // 检查是否需要认证
  if (to.meta.requiresAuth) {
    if (!isLoggedIn.value) {
      // 未登录，重定向到登录页
      next('/login')
      return
    }
    
    // 检查角色权限
    if (to.meta.role && user.value?.role !== to.meta.role) {
      // 角色不匹配，重定向到对应的页面
      if (user.value?.role === 'admin') {
        next('/admin')
      } else {
        next('/dashboard')
      }
      return
    }
  }
  
  next()
})

export default router
